/*      1.不买当前的瓜
        2.劈一半
        3.买一整个瓜
	对于以上三种情况，通过穷举所有排列组合
*/
#include <iostream>
#include<algorithm>
#define int long long 
using namespace std;
 int ans=50;//ans维护最小劈瓜数  先设为一个大值
 int a[50];//存瓜 原数组
 int sum[50];//表示的是从第 i 个瓜到第 n 个瓜的总质量
 int n,m;
int min(int a,int b)
{
  return a>b?b:a;
}

void dfs(int S,int i,int cnt)//总和，下标，劈瓜计数器
{
    if(cnt>=ans)return;//剪枝
    if(S==m) ans=min(ans,cnt);//如果相等，说明劈瓜劈够了，返回已经劈了几次瓜
    if(i>=n||S>=m||S+sum[i]<m) return ;//递归结束条件
     dfs(S+a[i],i+1,cnt);//买一个瓜
     dfs(S+a[i]/2,i+1,cnt+1);//买半个瓜，计数器+1
     dfs(S,i+1,cnt);//不买当前瓜，跳到下一个瓜
}
signed main()
{
   ios::sync_with_stdio(false); 
   cin.tie(0),cout.tie(0); 
  cin>>n>>m;
  m<<=1;//是一个位操作符，表示将变量m的二进制表示向左移动一位，相当于将m乘以2的1次方。
  for(int i=0;i<n;i++) cin>>a[i],a[i]<<=1;//为了防止劈瓜出现小数，将其左移一位*2倍
  sort(a,a+n,greater<>());//使用greater<>()，表示按照降序排序，让质量大的在前面，争取最小劈瓜次数可以满足条件
  

   //遍历所有的瓜
   for(int i=n-1;i>=0;i--)
   {
     sum[i]=sum[i+1]+a[i];//当前瓜及其之后所有瓜的总质量=从1到下一个瓜的总质量+当前瓜的质量
   }
  dfs(0,0,0);
  if(ans==50)cout<<-1;//最终 ans 仍然为初始值 50，则表示无法通过劈瓜的方式满足要求
  else cout<<ans;

  return 0;
}